home *** CD-ROM | disk | FTP | other *** search
- //
- // A View that Frames its Subview
- // Randy Nelson—Copyright NeXT 1990
- // Not for release or reuse
- //
-
- #import "SubViewFramer.h"
- #import <dpsclient/wraps.h>
- #import <appkit/graphics.h>
- #import "VisibleOne.h"
-
- @implementation SubViewFramer
-
- //factory method—sets clipping off
- + newFrame:(NXRect *)r
- {
- self = [super newFrame:r];
- [self setClipping:NO];
- return self;
- }
-
- //called by the visible view to frame it—transparently if requested
- - frameMe:sender
- {
- NXRect aRect;
- float subViewsFrameAngle;
-
- [self lockFocus];
- PSsetgray(0.5);
-
- //gets the subview's frame and rotation
- [sender getFrame:&aRect];
- subViewsFrameAngle = [sender frameAngle];
-
- //necessary to rotate around the same point the subview used if rotated
- if(subViewsFrameAngle != 0){
- PStranslate(aRect.origin.x, aRect.origin.y);
- PSrotate(subViewsFrameAngle);
- PStranslate(-aRect.origin.x, -aRect.origin.y);
- }
-
- //sets the alpha if sender wants a transparent superview
- if ([sender wantsTransparency]){
- PSsetalpha(NX_DKGRAY);
- }
-
- //a very ugly hack to frame the subview—anybody remember Trig?
- //left side
- PScompositerect(-1000.0, -1000.0, (1000.0 + aRect.origin.x), 2000.0, NX_SOVER);
- //top middle
- PScompositerect(aRect.origin.x, (aRect.origin.y + aRect.size.height), aRect.size.width, (2000.0 - (aRect.origin.y + aRect.size.height)), NX_SOVER);
- //right side
- PScompositerect((aRect.origin.x + aRect.size.width), -1000.0, (2000.0 - (aRect.origin.x + aRect.size.width)), 2000.0, NX_SOVER);
- //bottom middle
- PScompositerect(aRect.origin.x, -1000.0, aRect.size.width, (1000.0 + aRect.origin.y), NX_SOVER);
-
- //enclose the subview's frame
- PSsetgray(NX_BLACK);
- PSsetalpha(1.0);
- NXFrameRect(&aRect);
-
- [self unlockFocus];
- return self;
- }
-
- @end
-